/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package listas;

import java.io.Serializable;
import java.util.ArrayList;
import mensaje.Message;
import java.util.LinkedList;

/**
 * Esta clase define objetos que contienen listas de mensajes de los usuario de 
 * correo.
 * @author HaNs
 * @version v1.1.1
 */
public class ListaMensajes implements Serializable{
    private ArrayList<Message>  mensajes;

/**
 * Constructor de la clase
 */
    public ListaMensajes() {
        mensajes  = new ArrayList<>();
    }//Cierre del Constructor
 
 /**
  * Metodo que registra/agrega un mensaje de los usuarios de correo.
  * @param Message El parametro Message define el mensaje a ser agregado/registrado.
  */   
    public void agregarMensaje(Message mensajeAgregar){
        mensajes.add(mensajeAgregar);
    }//Cierre de método

/**
 * Método que devuelve la cantidad de mensajes agregado/registrados.
 * @return int Un objeto entero que es el resultado de la cantidad de mensajes
 * agregados/registrados.
 */    
    public int cantidadAgregados(){
        return mensajes.size();
    }//Cierre de método

/**
  * Método que devuelve un mensaje.
  * @param posicion El parametro posicion define el numero de lugar de un 
  * mensaje en la lista.
  * @return Message Un objeto Message con el resultado de un mensaje del usuario 
  * de correo.
 */    
    public Message obtenerMensaje(int posicion){
        try {
            return mensajes.get(posicion);
        } catch (IndexOutOfBoundsException  e) {
            return null;
        }
    }//Cierre del método
 
 /**
 * Método que elimina un usuario de correo.
 * @param posicion El parametro posicion define el numero de lugar de un 
 * usuario de correo en la lista.
  */   
    
    public void eliminarMensajePosicion(int posicion){
        mensajes.remove(posicion);
    }//Cierre del método
 
 /**
 * Método que obtiene una lista de mensajes de un usuario
 * @param userName El parametro userName define el nombre del usuario de correo.
 * @return ArrayList<Message> Un objeto ArrayList que es el resultado de la 
 * lista de mensajes del usuario de correo.
  */   
    public ArrayList<Message> obtenerMensajes(String userName){
        ArrayList<Message> mensajesUsuario = new ArrayList<>();
        for (int i = 0; i < mensajes.size(); i++) {
            Message mensajeValidar = mensajes.get(i);
            if (mensajeValidar.compararDestino(userName)) {
                mensajesUsuario.add(mensajeValidar);
            }
        }
        return mensajesUsuario;
    }//Cierre del método
 
 /**
 * Método que elimina un mensaje.
 * @param posicion El parametro posicion define el numero de lugar de un 
 * mensaje en la lista.
  */
    public void eliminarMensaje(Message mensajeEliminar){
        mensajes.remove(mensajeEliminar);
    }//Cierre del método
}//Cierre de la clase
